
// 入口文件
const Koa = require('koa2');
const cors = require('koa2-cors'); // 引入跨域模块
const router = require('./router'); // 引入路由入口文件
const { sign } = require('jsonwebtoken');
const jwt = require('koa-jwt'); // 鉴权token

const bodyparser = require('koa-bodyparser');
const koabody = require('koa-body');

const port = 3000; // 监听的端口号

// 实例化 Koa 对象
const app = new Koa();


// 获取header中的token
app.use( async ( ctx, next ) => {
    let token = ctx.request.header && ctx.request.header.token || null;
    if( token ) {
        ctx.request.header = Object.assign( ctx.request.header, { 'authorization': "Bearer " + token } )

        console.log( ctx.request.header );
    }                 
    
    await next()
} )

/**
 * 为了获取post传递过来的参数
 * bodyparser获取不到form-data格式的参数，
 * 所以添加koa-body中间件
*/
app.use( bodyparser(), koabody({ multipart: true }) ); 

router.post( '/login', async ctx => {
    let { username, password } = ctx.request.body
    let token = sign( { username, password }, 'jdf_token', { expiresIn: '1h' } )

    ctx.body = {
        username,
        token
    }
} )

router.get( '/info', async ctx => {
    ctx.body = {
        username: ctx.state.user.username,
        password: ctx.state.user.password
    }
} )

app.use( cors() ); // 允许后端跨域

app.use( jwt( { secret: 'jdf_token' } ).unless( { path: [ '/login' ] } ) )

/**
 * router.routes() -> 启动路由
 * router.allowedMethods() -> 允许路由使用的方法(get, post...)
*/
app.use( router.routes(), router.allowedMethods() );

// 监听端口
app.listen( port, () => {
    console.log( `server is running: http://localhost:${ port }` );
} );


